home *** CD-ROM | disk | FTP | other *** search
/ DS-CD ROM 2 1993 August / DS CD-ROM 2.Ausgabe (August 1993).iso / programm / ds0257 / lib.exe / MEMORY.LIB < prev    next >
Text File  |  1992-02-11  |  4KB  |  326 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. MEMORYBLOCKERROR EQU 08101H
  9. INVALIDBLOCKLENGTH EQU 08102H
  10. BLOCKISFREE EQU 08103H
  11. BLOCKBELONGSTODOS EQU 08104H
  12. BLOCKISNOMAINBLOCK EQU 08105H
  13. INVALIDBLOCKNAME EQU 08106H
  14. BLOCKNOTFOUND EQU 08107H
  15. CALCPARAGRAPHS:
  16. PUSH DX
  17. MOV BX,AX
  18. TEST BX,0FH
  19. PUSHF
  20. AND BX,0FFF0H
  21. POPF
  22. IF NZ ADD BX,010H
  23. SHR DX,1
  24. RCR BX,1
  25. SHR DX,1
  26. RCR BX,1
  27. SHR DX,1
  28. RCR BX,1
  29. SHR DX,1
  30. RCR BX,1
  31. POP DX
  32. RET
  33. CALCBYTES:
  34. MOV AX,BX
  35. XOR DX,DX
  36. SHL AX,1
  37. RCL DX,1
  38. SHL AX,1
  39. RCL DX,1
  40. SHL AX,1
  41. RCL DX,1
  42. SHL AX,1
  43. RCL DX,1
  44. RET
  45. SEARCHMEMORYBLOCK:
  46. PUSH SI,DI,DX,BX
  47. CLD
  48. LODSB
  49. OR AL,AL
  50. JNZ >L1
  51. L80:
  52. MOV AX,INVALIDBLOCKNAME
  53. STC
  54. JMP >L90
  55. L1:
  56. CMP AL,8
  57. JA L80
  58. MOV AH,0
  59. MOV DX,AX
  60. JE >L1
  61. MOV BX,AX
  62. MOV [SI+BX],AH
  63. INC DX
  64. L1:
  65. MOV AH,052H
  66. INT 021H
  67. MOV ES,ES:[BX-2]
  68. MOV CX,01
  69. L00:
  70. MOV BX,ES:[01]
  71. MOV AX,ES
  72. INC AX
  73. CMP BX,AX
  74. JNZ >L1
  75. PUSH CX,SI
  76. MOV CX,DX
  77. MOV DI,08
  78. REPE CMPSB
  79. POP SI,CX
  80. JE >L9
  81. L1:
  82. INC CX
  83. CMP B ES:[0],'Z'
  84. JE >L8
  85. CMP B ES:[0],'M'
  86. JNE >L81
  87. ADD AX,ES:[03]
  88. MOV ES,AX
  89. JMP L00
  90. L81:
  91. MOV AX,07H
  92. L8:
  93. STC
  94. L9:
  95. MOV ES,AX
  96. L90:
  97. POP BX,DX,DI,SI
  98. RET
  99. TESTMEMORYBLOCK:
  100. PUSH ES
  101. CALL INTERN_CHECKBLOCKADRESS
  102. POP ES
  103. RET
  104. SETBLOCKNAME:
  105. PUSH DI
  106. MOV DI,OFFSET INTERN_SETNAME
  107. JMP >L1
  108. GETOWNERNAME:
  109. PUSH DI
  110. MOV DI,OFFSET INTERN_GETNAME
  111. MOV B[SI],0
  112. L1:
  113. PUSH ES,SI
  114. XOR BX,BX
  115. CALL INTERN_CHECKBLOCKADRESS
  116. JC >L8
  117. MOV ES,AX
  118. MOV BX,ES:[01]
  119. MOV AX,BLOCKISFREE
  120. OR BX,BX
  121. JE >L8
  122. MOV AX,BLOCKBELONGSTODOS
  123. CMP BX,08H
  124. JE >L8
  125. MOV AX,ES
  126. INC AX
  127. CMP AX,BX
  128. MOV AH,0
  129. JE >L1
  130. DEC BX
  131. MOV ES,BX
  132. INC AH
  133. L1:
  134. XOR BX,BX
  135. CALL DI
  136. JC >L8
  137. MOV AL,AH
  138. JMP >L9
  139. L8:
  140. STC
  141. L9:
  142. POP SI,ES
  143. POP DI
  144. RET
  145. GETUMBLINKSTATUS:
  146. MOV AX,05802H
  147. INT 021H
  148. RET
  149. SETUMBLINKSTATUS:
  150. PUSH BX
  151. AND AX,01H
  152. MOV BX,AX
  153. MOV AX,05803H
  154. INT 021H
  155. POP BX
  156. RET
  157. GETMEMORYSTRATEGY:
  158. MOV AX,05800H
  159. INT 021H
  160. RET
  161. SETMEMORYSTRATEGY:
  162. PUSH BX
  163. MOV BX,AX
  164. MOV AX,05801H
  165. INT 021H
  166. POP BX
  167. RET
  168. GETMEMORYBLOCK:
  169. MOV AX,INVALIDBLOCKLENGTH
  170. OR BX,BX
  171. STC
  172. JZ RET
  173. MOV AH,048H
  174. INT 021H
  175. RET
  176. FREEMEMORYBLOCK:
  177. PUSH ES
  178. CALL INTERN_CHECKBLOCKADRESS
  179. JC >L8
  180. INC AX
  181. MOV ES,AX
  182. MOV AH,049H
  183. INT 021H
  184. L8:
  185. POP ES
  186. RET
  187. SETBLOCKSIZE:
  188. OR BX,BX
  189. JNZ >L1
  190. MOV AX,INVALIDBLOCKLENGTH
  191. STC
  192. RET
  193. L1:
  194. PUSH CX,BX
  195. PUSH BX
  196. CALL GETBLOCKSIZE
  197. POP BX
  198. JC >L8
  199. MOV CX,BX
  200. MOV AH,04AH
  201. INT 021H
  202. JNC >L9
  203. CMP AX,08
  204. JNE >L8
  205. CMP BX,CX
  206. JE >L8
  207. PUSH AX
  208. PUSH BX
  209. MOV BX,CX
  210. MOV AH,04AH
  211. INT 021H
  212. POP BX
  213. POP AX
  214. L8:
  215. STC
  216. L9:
  217. POP BX,CX
  218. RET
  219. GETBLOCKSIZE:
  220. PUSH ES
  221. CALL INTERN_CHECKBLOCKADRESS
  222. JC >L8
  223. MOV ES,AX
  224. MOV BX,ES:[03]
  225. MOV AX,ES:[01]
  226. CMP B ES:[0],'Z'
  227. CLC
  228. L8:
  229. POP ES
  230. RET
  231. INTERN_CHECKBLOCKADRESS:
  232. MOV AX,ES
  233. DEC AX
  234. MOV ES,AX
  235. CMP B ES:[0],'Z'
  236. JE >L9
  237. CMP B ES:[0],'M'
  238. JNE >L8
  239. PUSH AX
  240. ADD AX,ES:[03]
  241. INC AX
  242. MOV ES,AX
  243. POP AX
  244. CMP B ES:[0],'M'
  245. JE >L9
  246. CMP B ES:[0],'Z'
  247. JE >L9
  248. L8:
  249. STC
  250. MOV AX,MEMORYBLOCKERROR
  251. L9:
  252. RET
  253. INTERN_GETNAME:
  254. PUSH SI
  255. L0:
  256. MOV AL,ES:[BX]+08
  257. OR AL,AL
  258. JZ >L1
  259. INC SI
  260. MOV [SI],AL
  261. INC BX
  262. CMP BL,08
  263. JB L0
  264. L1:
  265. POP SI
  266. MOV B[SI],BL
  267. CLC
  268. RET
  269. INTERN_SETNAME:
  270. OR AH,AH
  271. JZ >L1
  272. MOV AX,BLOCKISNOMAINBLOCK
  273. STC
  274. RET
  275. L1:
  276. PUSHF
  277. PUSH CX
  278. CLD
  279. LODSB
  280. MOV CL,AL
  281. XOR CH,CH
  282. CMP CL,08
  283. IF A MOV CL,8
  284. JCXZ >L1
  285. L0:
  286. LODSB
  287. MOV ES:[BX]+08,AL
  288. INC BX
  289. LOOP L0
  290. L1:
  291. CMP BL,08
  292. IF B MOV B ES:[BX]+08,0
  293. POP CX
  294. POPF
  295. RET
  296. #IF !INTERN_CMARK0
  297. INTERN_CMARK0 EQU 01H
  298. INTERN_CMARK1:
  299. PUSH BP
  300. MOV BP,SP
  301. MOV BX,06H
  302. SUB CH,[BP+SI]
  303. SUB AH,[BX+SI]
  304. DEC SP
  305. DEC CX
  306. INC DX
  307. XOR AL,041H
  308. CMP B[02820H],DH
  309. INC BX
  310. SUB W[BX+SI],SP
  311. INC DX
  312. CS AND B[BP+DI+043H],DL
  313. DEC AX
  314. INC BP
  315. DEC BP
  316. DEC BP
  317. INC BP
  318. PUSH DX
  319. AND B[BP+SI],CH
  320. SUB CH,[BP+SI]
  321. POP DX
  322. MOV SP,BP
  323. POP BP
  324. RET
  325. #ENDIF
  326.